package com.jing21.learn.elasticsearch.intf.query;

import com.jing21.learn.elasticsearch.intf.enums.EsIndexTypeEnum;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @param <T> 对应的po
 * @author zhengjing
 * @version 1.0
 * @date: 2017/10/23 14:52
 */

public abstract class BaseIndexQuery<T> {

    /**
     * 获取索引类型的枚举（相当于表）
     *
     * @return
     */
    public abstract EsIndexTypeEnum getEsIndexType();

    /**
     * 获取对象的实体类型
     *
     * @return
     */
    public Class<T> getSourceClass() {

        Type generic = this.getClass().getGenericSuperclass();
        if (generic instanceof ParameterizedType) {
            ParameterizedType type = (ParameterizedType) generic;

            return (Class<T>) type.getActualTypeArguments()[0];
        }
        return null;
    }
}